#include "mypushbutton.h"
#include <QDebug>
/* 动画效果头文件 */
#include <QPropertyAnimation>

MyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent)
{

}
/* c++语法，声名和实现中只需要一个默认参数即可 */
MyPushButton::MyPushButton(QString normalPath, QString pressPath)
{
    this->pressPath = pressPath;
    this->normalPath = normalPath;

    /* 加载正常图片 */
    QPixmap pix;
    bool ret = pix.load(normalPath);
    if (!ret) {
        qDebug() << "normal picture load failed";
        return;
    }
    /* 设置无边框 */
    this->setStyleSheet("QPushButton { border:0px }");
    /* 设置固定大小 */
    this->setFixedSize(pix.width(), pix.height());
    /* 设置图标 */
    this->setIcon(pix);
    /* 设置图标大小 */
    this->setIconSize(QSize(pix.width(), pix.height()));
}
/* 重写鼠标按下事件 */
void MyPushButton::mousePressEvent(QMouseEvent *event)
{
    if (this->pressPath != nullptr) {
        /* 加载按下图片 */
        QPixmap pix;
        bool ret = pix.load(this->pressPath);
        if (!ret) {
            qDebug() << "press picture load failed";
            return;
        }
        /* 设置无边框 */
        this->setStyleSheet("QPushButton { border:0px }");
        /* 设置固定大小 */
        this->setFixedSize(pix.width(), pix.height());
        /* 设置图标 */
        this->setIcon(pix);
        /* 设置图标大小 */
        this->setIconSize(QSize(pix.width(), pix.height()));
    }
    /* 将事件传递给父类继续执行 */
    return QPushButton::mousePressEvent(event);
}
/* 重写鼠标离开事件 */
void MyPushButton::mouseReleaseEvent(QMouseEvent *event)
{
    if (this->pressPath != nullptr) {
        /* 加载按下图片 */
        QPixmap pix;
        bool ret = pix.load(this->normalPath);
        if (!ret) {
            qDebug() << "press picture load failed";
            return;
        }
        /* 设置无边框 */
        this->setStyleSheet("QPushButton { border:0px }");
        /* 设置固定大小 */
        this->setFixedSize(pix.width(), pix.height());
        /* 设置图标 */
        this->setIcon(pix);
        /* 设置图标大小 */
        this->setIconSize(QSize(pix.width(), pix.height()));
    }
    /* 将事件交给父类，继续执行 */
    return QPushButton::mouseReleaseEvent(event);
}

void MyPushButton::jump_up(void)
{
    /* 创建动画对象 */
    QPropertyAnimation *animation = new  QPropertyAnimation(this, "geometry");
    /* 设置动画持续时间,200毫秒 */
    animation->setDuration(200);
    /* 设置动画的开始位置 */
    animation->setStartValue(QRect(x(), y(), width(), height()));
    /* 设置动画的结束位置 */
    animation->setEndValue(QRect(x(), y() + 10, width(), height()));
    /* 设置动画的活动曲线 */
    animation->setEasingCurve(QEasingCurve::OutBounce);
    /* 开始动画 */
    animation->start();
}

void MyPushButton::jump_down(void)
{
    /* 创建动画对象 */
    QPropertyAnimation *animation = new  QPropertyAnimation(this, "geometry");
    /* 设置动画持续时间,200毫秒 */
    animation->setDuration(200);
    /* 设置动画的开始位置 */
    animation->setStartValue(QRect(x(), y() + 10, width(), height()));
    /* 设置动画的结束位置 */
    animation->setEndValue(QRect(x(), y(), width(), height()));
    /* 设置动画的活动曲线 */
    animation->setEasingCurve(QEasingCurve::OutBounce);
    /* 开始动画 */
    animation->start();
}
